/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.zonacardio.servlest;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Arrays;
import com.zonacardio.negocio.VentaPlanN;
import com.zonacardio.entidad.VentaPlanes;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.zonacardio.entidad.Plan;
import com.zonacardio.negocio.PlanN;
import com.zonacardio.entidad.Deportistas;
import com.zonacardio.negocio.DeportistasN;
import com.zonacardio.utilidades.Tiempo;
import java.util.Properties;
import javax.mail.AuthenticationFailedException;
/*Para enviar Mail*/
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.RequestDispatcher;

/**
 *
 * @author USUARIO
 */
public class VentaServlet extends HttpServlet {

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        String idDeportista = request.getParameter("txtidDeportista");
        String CodigoPlan = request.getParameter("txtcodigo");
        String CodigoVenta = request.getParameter("txtCodigoVenta");
        String FechaVenta = request.getParameter("txtFechaventa");
    
        String valor= request.getParameter("txtvalor");
        String Iva = request.getParameter("txtIva");
        String Usuariocreador = request.getParameter("txtUsuarioCreador");
        String mail= request.getParameter("txtmail");

        String targetPage = "./Principal.jsp";
        request.setAttribute("target", "./FPrincipal.jsp");
        request.setAttribute("targetModulo", "./FVentaPlan.jsp");
        /*-------Para el envio de mails */
        
        String from = "gimnasiozonacardio@gmail.com";
        String to = mail;
        String subject = "compra plan Gimnasio No."+CodigoVenta;
        String message ="Plan No."+ CodigoPlan;
        message+=" Por valor de $ "+valor;
        
        String login = "gimnasiozonacardio@gmail.com";
        String password = "linamaria2013";
        
        
        VentaPlanN negocioU = new VentaPlanN();
        VentaPlanes entVP = new VentaPlanes();
        PlanN negocioP = new PlanN();
        Plan entP = new Plan();
        request.setAttribute("ListaPlanes", null);
        DeportistasN negocioD = new DeportistasN();
        Deportistas entD = new Deportistas();
        request.setAttribute("ListaDeportistas", null);
         request.setAttribute("plan", null);

        if ("Listar".equals(request.getParameter("action"))) {
            try {
                List<VentaPlanes> ListaVentaPlan = negocioU.ListadoDeVentaPlanes();
                request.setAttribute("ListaVentaPlanes", ListaVentaPlan);
                List<Plan> ListaPlanes = negocioP.ListadoDePlanes();
                request.setAttribute("ListaPlanes", ListaPlanes);
                entVP.setCodigoventa(negocioU.getConsecutivoVentaPlan());
                entVP.setCodigoplanes("");
                entVP.setFechaventa(Tiempo.getFecha());
                entVP.setUsuariocreador(Usuariocreador);
                entVP.setValor("0");
                entVP.setIva("16");
                request.setAttribute("vp", entVP);
                request.setAttribute("mensaje", null);
            } catch (Exception ex) {
                Logger.getLogger(VentaServlet.class.getName()).log(Level.SEVERE, null, ex);
                request.setAttribute("mensaje", ex.getMessage());
            }
        }




        if ("guardar".equals(request.getParameter("guardar"))) {
            String men = "";
            try {
                men = negocioU.insertVentaPlan(CodigoPlan, idDeportista, FechaVenta,
                        CodigoVenta, Iva, Usuariocreador, valor);

                entVP.setCodigoplanes("");
                entVP.setNumero_documento_deportistas("");
                entVP.setFechaventa(Tiempo.getFecha());
                entVP.setCodigoventa("");
                entVP.setUsuariocreador("");
                entVP.setIva("");
                request.setAttribute("vp", entVP);
                entP.setCodigo("");
                entP.setDescripcion("");
                entP.setValor("");
                request.setAttribute("plan", entP);
                List<VentaPlanes> ListaVentaPlan = negocioU.ListadoDeVentaPlanes();
                request.setAttribute("ListaVentaPlanes", ListaVentaPlan);


                /*Enviar mail por correo*/
                try {

                    Properties props = new Properties();
                    props.setProperty("mail.host", "smtp.gmail.com");
                    props.setProperty("mail.smtp.port", "587");
                    props.setProperty("mail.smtp.auth", "true");
                    props.setProperty("mail.smtp.starttls.enable", "true");

                    Authenticator auth = new SMTPAuthenticator(login, password);

                    Session session = Session.getInstance(props, auth);

                    MimeMessage msg = new MimeMessage(session);
                    msg.setText(message);
                    msg.setSubject(subject);
                    msg.setFrom(new InternetAddress(from));
                    msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
                    Transport.send(msg);

                } catch (AuthenticationFailedException ex) {
                    men += "<br>Error de autenticación";
                } catch (AddressException ex) {
                    men += "<br>Error correo eléctronico del cliente";
                } catch (MessagingException ex) {
                    men += "<br>Error Al envio datos de Compra ";

                }

            } catch (Exception ex1) {
                Logger.getLogger(VentaServlet.class.getName()).log(Level.SEVERE, null, ex1);
                request.setAttribute("mensaje", ex1.getMessage());
            }
            request.setAttribute("mensaje", men);
        }
        if ("editar".equals(request.getParameter("action"))) {
            // UsuarioN negocioC = new UsuarioN();
            try {
                negocioU.updateVentaPlan(CodigoPlan, idDeportista, FechaVenta, Iva, Usuariocreador, CodigoVenta);
                request.setAttribute("vp", entVP);
                List<VentaPlanes> ListaVentaPlanes = negocioU.ListadoDeVentaPlanes();
                request.setAttribute("ListaVentaPlanes", ListaVentaPlanes);
            } catch (Exception ex) {
                Logger.getLogger(VentaServlet.class.getName()).log(Level.SEVERE, null, ex);
                request.setAttribute("mensaje", ex.getMessage());
            }
        }



        if ("buscar".equals(request.getParameter("buscar"))) {

            try {
                entVP = negocioU.getVentaPlan(CodigoVenta);
                request.setAttribute("vp", entVP);
                List<VentaPlanes> ListaVentaPlanes = negocioU.ListadoDeVentaPlanes();
                request.setAttribute("ListaVentaPlanes", ListaVentaPlanes);
                List<Plan> ListaPlanes = negocioP.ListadoDePlanes();
               
                request.setAttribute("ListaPlanes", ListaPlanes);

            } catch (Exception ex) {
                Logger.getLogger(VentaServlet.class.getName()).log(Level.SEVERE, null, ex);
                request.setAttribute("mensaje", ex.getMessage());
            }
        }
        
        

        if ("traer_dep".equals(request.getParameter("action"))) {

            try {
                entD = negocioD.buscarDeportistas(idDeportista);
                request.setAttribute("deportista", entD);
                entVP.setFechaventa(Tiempo.getFecha());
                entVP.setCodigoventa(negocioU.getConsecutivoVentaPlan());
                entVP.setCodigoplanes("");
                entVP.setNumero_documento_deportistas(idDeportista);
                entVP.setUsuariocreador(Usuariocreador);
                entVP.setIva("16");
               
                request.setAttribute("vp", entVP);
                List<Deportistas> ListarDeportistas = negocioD.ListadoDeportistas();
                request.setAttribute("ListaDeportistas", ListarDeportistas);
                 List<VentaPlanes> ListaVentaPlanes = negocioU.ListadoDeVentaPlanes();
                request.setAttribute("ListaVentaPlanes", ListaVentaPlanes);
                List<Plan> ListarPlan = negocioP.ListadoDePlanes();
                request.setAttribute("ListaPlanes", ListarPlan);
                 request.setAttribute("plan", null);
                
            } catch (Exception ex) {
                Logger.getLogger(VentaServlet.class.getName()).log(Level.SEVERE, null, ex);
                request.setAttribute("mensaje", ex.getMessage());
            }
        }

       if ("traerPlan".equals(request.getParameter("action"))) {

            try {
                entD = negocioD.buscarDeportistas(idDeportista);
                request.setAttribute("deportista", entD);
                entVP.setFechaventa(Tiempo.getFecha());
                entVP.setCodigoventa(negocioU.getConsecutivoVentaPlan());
                entVP.setCodigoplanes("");
                entVP.setNumero_documento_deportistas(idDeportista);
                entVP.setUsuariocreador(Usuariocreador);
                entVP.setIva("16");

                request.setAttribute("vp", entVP);
                List<Deportistas> ListarDeportistas = negocioD.ListadoDeportistas();
                request.setAttribute("ListaDeportistas", ListarDeportistas);
                 List<VentaPlanes> ListaVentaPlanes = negocioU.ListadoDeVentaPlanes();
                request.setAttribute("ListaVentaPlanes", ListaVentaPlanes);
                List<Plan> ListarPlan = negocioP.ListadoDePlanes();
                request.setAttribute("ListaPlanes", ListarPlan);
               entP = negocioP.getPlan(CodigoPlan);
                request.setAttribute("plan", entP);
                


            } catch (Exception ex) {
                Logger.getLogger(VentaServlet.class.getName()).log(Level.SEVERE, null, ex);
                request.setAttribute("mensaje", ex.getMessage());
            }
        }


        if ("nuevo".equals(request.getParameter("action"))) {

            try {
                entD = negocioD.buscarDeportistas(idDeportista);
                request.setAttribute("deportista", entD);
                entVP.setFechaventa(Tiempo.getFecha());
                entVP.setCodigoventa(negocioU.getConsecutivoVentaPlan());
                entVP.setCodigoplanes("");
                entVP.setNumero_documento_deportistas(idDeportista);
                entVP.setUsuariocreador(Usuariocreador);
                entVP.setIva("16");
               
                request.setAttribute("vp", entVP);
                List<Deportistas> ListarDeportistas = negocioD.ListadoDeportistas();
                request.setAttribute("ListaDeportistas", ListarDeportistas);
                 List<VentaPlanes> ListaVentaPlanes = negocioU.ListadoDeVentaPlanes();
                request.setAttribute("ListaVentaPlanes", ListaVentaPlanes);
            } catch (Exception ex) {
                Logger.getLogger(VentaServlet.class.getName()).log(Level.SEVERE, null, ex);
                request.setAttribute("mensaje", ex.getMessage());
            }
        }
        
        
        
        
 if ("traer_plan".equals(request.getParameter("action"))) {

            try {
                entP = negocioP.getPlan(CodigoPlan);
                request.setAttribute("plan", entP);
                List<Plan> ListarPlan = negocioP.ListadoDePlanes();
                request.setAttribute("ListarPlan", ListarPlan);
                 List<VentaPlanes> ListaVentaPlanes = negocioU.ListadoDeVentaPlanes();
                request.setAttribute("ListaVentaPlanes", ListaVentaPlanes);
            } catch (Exception ex) {
                Logger.getLogger(VentaServlet.class.getName()).log(Level.SEVERE, null, ex);
                request.setAttribute("mensaje", ex.getMessage());
            }
        }




        request.getRequestDispatcher(targetPage).forward(request, response);

    }
    
    private class SMTPAuthenticator extends Authenticator {

        private PasswordAuthentication authentication;

        public SMTPAuthenticator(String login, String password) {
            authentication = new PasswordAuthentication(login, password);
        }

        protected PasswordAuthentication getPasswordAuthentication() {
            return authentication;
        }
    }
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}



